// pages/login/login.js
Page({
  data: {
    username: "",
    password: "",
    errorMsg: "",
    isLoading: false,
  },

  onLoad(options) {
    // 页面加载时执行的逻辑
  },

  onUsernameInput(e) {
    this.setData({
      username: e.detail.value,
      errorMsg: "",
    });
  },

  onPasswordInput(e) {
    this.setData({
      password: e.detail.value,
      errorMsg: "",
    });
  },

  // 处理登录请求
  handleLogin() {
    const { username, password } = this.data;

    // 表单验证
    if (!username.trim()) {
      this.setData({ errorMsg: "请输入用户名" });
      return;
    }

    if (!password) {
      this.setData({ errorMsg: "请输入密码" });
      return;
    }

    // 显示加载状态
    this.setData({ isLoading: true });

    // 发送登录请求
    wx.request({
      url: "https://smartsound.top/api/v1/login",
      method: "POST",
      data: {
        username: username,
        password: password,
      },
      success: (res) => {
        console.log("登录响应:", res.data);
        if (res.data.code === 0) {
          // 登录成功，保存用户信息
          wx.setStorageSync("userInfo", {
            userId: res.data.user_id,
            username: res.data.username,
            devices: res.data.devices,
          });

          // 保存access_token到本地存储
          wx.setStorageSync(
            "access_token",
            res.data.token || "fake_token_for_test"
          );

          // 获取用户昵称
          this.getNickname(res.data.user_id, res.data.devices);
        } else {
          // 登录失败，显示错误信息
          this.setData({
            errorMsg: "用户名或密码错误",
            isLoading: false,
          });
        }
      },
      fail: (err) => {
        console.error("登录请求失败", err);
        this.setData({
          errorMsg: "网络错误，请稍后重试",
          isLoading: false,
        });
      },
    });
  },

  // 处理微信快捷登录
  handleWechatLogin() {
    // 显示加载状态
    this.setData({ isLoading: true });

    // 调用微信登录接口获取登录凭证（code）
    wx.login({
      success: (res) => {
        if (res.code) {
          console.log("微信登录成功，code:", res.code);

          // 获取小程序的appid和secret
          const app = getApp();

          // 发送请求到后端接口
          wx.request({
            url: `https://smartsound.top/api/v1/wechat_login`,
            method: "POST",
            data: {
              js_code: res.code,
              grant_type: "authorization_code",
            },
            success: (response) => {
              if (response.data.code === 0) {
                // 登录成功，保存用户信息
                const devices = response.data.devices || [];
                const isFirstLogin = response.data.is_first_login || false;

                wx.setStorageSync("userInfo", {
                  userId: response.data.user_id,
                  username: response.data.username,
                  devices: devices,
                });

                // 保存access_token到本地存储
                wx.setStorageSync(
                  "access_token",
                  response.data.token || "fake_token_for_test"
                );

                // 如果是首次登录，设置默认昵称为"微信用户"
                if (isFirstLogin) {
                  this.updateNicknameToWechatUser(response.data.user_id);
                } else {
                  // 获取用户昵称
                  this.getNickname(response.data.user_id, devices);
                }
              } else {
                // 登录失败，显示错误信息
                this.setData({
                  errorMsg: response.data.message || "微信登录失败",
                  isLoading: false,
                });
              }
            },
            fail: (err) => {
              console.error("微信登录请求失败", err);
              this.setData({
                errorMsg: "网络错误，请稍后重试",
                isLoading: false,
              });
            },
          });
        } else {
          console.error("获取微信登录凭证失败", res);
          this.setData({
            errorMsg: "获取微信登录凭证失败",
            isLoading: false,
          });
        }
      },
      fail: (err) => {
        console.error("微信登录接口调用失败", err);
        this.setData({
          errorMsg: "微信登录接口调用失败",
          isLoading: false,
        });
      },
    });
  },

  // 添加更新用户昵称为"微信用户"的方法
  updateNicknameToWechatUser: function (userId) {
    wx.request({
      url: "https://smartsound.top/api/v1/update_nickname",
      method: "POST",
      data: {
        user_id: userId,
        nickname: "微信用户",
      },
      success: (res) => {
        if (res.data && res.data.code === 0) {
          console.log("成功将昵称更新为'微信用户'");

          // 更新本地存储的用户信息
          const userInfo = wx.getStorageSync("userInfo");
          if (userInfo) {
            userInfo.nickname = "微信用户";
            wx.setStorageSync("userInfo", userInfo);
          }

          // 重置加载状态
          this.setData({ isLoading: false });

          // 获取设备列表并跳转
          const devices = userInfo.devices || [];
          this.redirectAfterLogin(devices);
        } else {
          console.error("更新昵称失败:", res.data);
          // 尝试获取原昵称
          this.getNickname(userId, userInfo.devices || []);
        }
      },
      fail: (err) => {
        console.error("更新昵称请求失败:", err);
        // 尝试获取原昵称
        const userInfo = wx.getStorageSync("userInfo");
        this.getNickname(userId, userInfo.devices || []);
      },
    });
  },

  // 跳转到注册页面
  navigateToRegister() {
    wx.navigateTo({
      url: "/pages/register/register",
    });
  },

  // 添加获取昵称的方法
  getNickname: function (userId, devices) {
    const app = getApp();
    wx.request({
      url: `https://smartsound.top/api/v1/get_nickname`,
      method: "GET",
      data: {
        user_id: userId,
      },
      success: (res) => {
        if (res.data && res.data.code === 0) {
          // 获取昵称成功，更新本地存储
          const userInfo = wx.getStorageSync("userInfo");
          userInfo.nickname = res.data.nickname;
          wx.setStorageSync("userInfo", userInfo);
        } else if (res.statusCode === 404) {
          // 如果接口返回404，则使用username作为nickname
          const userInfo = wx.getStorageSync("userInfo");
          userInfo.nickname = userInfo.username;
          wx.setStorageSync("userInfo", userInfo);
        }

        // 重置加载状态
        this.setData({ isLoading: false });

        // 根据是否有设备决定跳转到哪个页面
        this.redirectAfterLogin(devices);
      },
      fail: (err) => {
        console.error("获取昵称失败", err);
        // 使用username作为nickname
        const userInfo = wx.getStorageSync("userInfo");
        userInfo.nickname = userInfo.username;
        wx.setStorageSync("userInfo", userInfo);

        // 重置加载状态
        this.setData({ isLoading: false });

        // 根据是否有设备决定跳转到哪个页面
        this.redirectAfterLogin(devices);
      },
    });
  },

  // 登录后根据是否有设备决定跳转页面
  redirectAfterLogin: function (devices) {
    console.log("重定向，设备列表:", devices);

    // 保存当前登录成功标志，以便登录成功提示
    wx.setStorageSync("login_success", true);

    // 无论是否有设备，都跳转到首页
    wx.switchTab({
      url: "/pages/home/home",
      success: () => {
        // 登录成功提示
        wx.showToast({
          title: "登录成功",
          icon: "success",
          duration: 2000,
        });
      },
      fail: (err) => {
        console.error("跳转到首页失败:", err);
        // 如果switchTab失败，尝试redirectTo
        wx.redirectTo({
          url: "/pages/home/home",
        });
      },
    });
  },
});
